package core;

import javax.swing.JFrame;

public class QAMConstelationDecoder extends UnitAbstract {
	private double ratio0 = 1.0;
	private double ratio1 = 1.0;
	private transient DataPackage dataPack0;
	private transient DataPackage dataPack1;
	
	public QAMConstelationDecoder(){
		inputs = new String[]{"1","2"};
		outputs = new String[]{"O"};
	}

	public void read(DataPackage dataPack, String tPort) {
		if(dataPack0 == null && tPort.equals(inputs[0])){
			dataPack0=dataPack;
		}
		if(dataPack1 == null && tPort.equals(inputs[1])){
			dataPack1=dataPack;
		}
		if(dataPack0 != null && dataPack1 != null){
	        DataPackage outputPack = new DataPackage();
	        int sampNum = dataPack0.data.length*4;
	        outputPack = dataPack1.clone();
	        outputPack.timeStart= dataPack1.timeStart - 0.002;
	        for(int i=0; i<dataPack0.data.length; i++){
	            outputPack.data[i] = //mapping((int)Math.round(dataPack0.data[i]), (int)Math.round(dataPack1.data[i]))/15*2-1;
	            (mapping((int)Math.round((dataPack0.data[i]+3)/2))*4/7.5)+(mapping((int)Math.round((dataPack1.data[i]+3)/2))/7.5)-1;
	            
	        }
	        sendData(outputPack);
	        dataPack0 = null;
	        dataPack1 = null;
		}
	}
	private double mapping(int d){
		switch(d){
		case 0:
			return 3;
		case 1:
			return 2;
		case 2:
			return 0;
		}
		return 1;
	}


	
//	private double mapping(int I, int Q) {
//		if(I == 3){
//			if(Q == 3){
//				return 5;
//			} else if(Q == 1){
//				return 4;
//			} else if(Q == -1){
//				return 6;
//			} else if(Q == -3){
//				return 7;
//			}
//		} else if(I == 1){
//			if(Q == 3){
//				return 1;
//			} else if(Q == 1){
//				return 0;
//			} else if(Q == -1){
//				return 2;
//			} else if(Q == -3){
//				return 3;
//			}
//		} else if(I == -1){
//			if(Q == 3){
//				return 9;
//			} else if(Q == 1){
//				return 8;
//			}else if(Q == -1){
//				return 10;
//			}else if(Q == -3){
//				return 11;
//			}
//		} else if(I == -3){
//			if(Q == 3){
//				return 13;
//			} else if(Q == 1){
//				return 12;
//			}else if(Q == -1){
//				return 14;
//			}else if(Q == -3){
//				return 15;
//			}
//		}
//		return 15;
//	}
	

	@Override
	public JFrame getFrame() {
		// TODO Auto-generated method stub
		return null;
	}
	@Override
	public String toString() {
		return "Dekoder QAM16";
	}
}
